/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package escom.ipn.modelo.dao;

import escom.ipn.modelo.dto.coordenadaIncidenteClass;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Daniel
 */
public class coordenadaIncidenteDAO {
           public static final String SQL_INSERT =
            "insert into COORDENADA_INCIDENTE (INCIDENTE_id_incidente, latitude,longitud) values(?, ?, ?) ";
           public static final String SQL_SELECT_ALL =
            "select a.INCIDENTE_id_incidente,a.latitude,a.longitud,c.estado,d.nombre_incidente from COORDENADA_INCIDENTE a INNER JOIN INCIDENTE b ON "
            +"a.INCIDENTE_id_incidente=b.id_incidente INNER JOIN CAT_ESTADOS_INCIDENTE c "
            +"ON b.CAT_ESTADOS_INCIDENTE_id_estado_incidente=c.id_estado_incidente INNER JOIN CAT_TIPO_INCIDENTE d ON "
            +"b.CAT_TIPO_INCIDENTE_id_tipo_incidente=d.id_tipo_incidente "
            + "INNER JOIN USUARIO_INCIDENTE e ON e.incidente_id=b.id_incidente INNER JOIN USUARIO f ON "
            + "e.usuario_id=f.id WHERE f.id=? and c.estado not in('Terminado')";
           
           public static final String SQL_SELECT=
            "select a.INCIDENTE_id_incidente,a.latitude,a.longitud,c.estado,d.nombre_incidente from COORDENADA_INCIDENTE a INNER JOIN INCIDENTE b ON "
            +"a.INCIDENTE_id_incidente=b.id_incidente INNER JOIN CAT_ESTADOS_INCIDENTE c "
            +"ON b.CAT_ESTADOS_INCIDENTE_id_estado_incidente=c.id_estado_incidente INNER JOIN CAT_TIPO_INCIDENTE d ON "
            +"b.CAT_TIPO_INCIDENTE_id_tipo_incidente=d.id_tipo_incidente where a.INCIDENTE_id_incidente= ? ";

    
    public void createCoordenadaIncidente(coordenadaIncidenteClass a, Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        try 
        {
            ps = conn.prepareStatement(SQL_INSERT);
            ps.setString(1, a.getId());
            ps.setString(2, a.getLatitude());
            ps.setString(3, a.getLongitude());
            ps.executeUpdate();
        } 
        finally
        {
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    public coordenadaIncidenteClass loadCoordenadaIncidente(coordenadaIncidenteClass a,Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT);
            ps.setString(1, a.getId());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
            if (resultados.size() > 0) {
                return (coordenadaIncidenteClass)resultados.get(0);
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    public List getCoordenadas(coordenadaIncidenteClass a,Connection conn)
    throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT_ALL);
            ps.setString(1, a.getId_Usuario());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
            if (resultados.size() > 0) {
                return resultados;
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    private List getResults(ResultSet rs)
            throws SQLException {
        List results = new ArrayList();
        while (rs.next()) 
        {
            coordenadaIncidenteClass a = new coordenadaIncidenteClass();
            a.setId(rs.getString("INCIDENTE_id_incidente"));
            a.setLatitude(rs.getString("latitude"));
            a.setLongitude(rs.getString("longitud"));
            a.setEstado(rs.getString("estado"));
            a.setNombreIncidente(rs.getString("nombre_incidente"));
            results.add(a);
        }
        return results;
    }
    
    private void cerrar(Connection cnn) {
        if (cnn != null) {
            try {
                cnn.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }

    private void cerrar(PreparedStatement ps) {
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }

    private void cerrar(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }    
}
